#ifndef _TELEPHONEBOOK_H_
#define _TELEPHONEBOOK_H_

#include <stdbool.h>

struct telephoneBook;

typedef struct telephoneBook TBook;

typedef void * elementType;

//创建一个电话簿
TBook *initTBook(int capacity, void (*freePtr)(elementType));

//释放数组
void freeTBook(void *ptr);

//插入新的联系人
bool insertContact(TBook *a, elementType element);

//查找联系人
elementType findContactPerson(TBook *a, elementType element, bool (*find)(elementType, elementType));

// //按照联系人名字查找电话
// elementType findPhoneByName(TBook *a, bool (*find)(elementType element));

// //按照电话查找联系人名字
// elementType findNameByPhonr(TBook *a, bool (*find)(elementType element));

//模糊查询功能

//二分查找联系人功能
elementType binarySerchContactPerson(TBook *a, elementType element, int (*find)(elementType, elementType));

//删除联系人
void delContactPerson(TBook *a, elementType element, bool (*find)(elementType, elementType));

// //按名字删除联系人
// void DelContactByName(TBook *a, elementType element);

// //按电话删除联系人
// void DelContactByPhone(TBook *a, elementType element);

//打印联系人信息
void printTBook(TBook *a, void (*print)(elementType));

//插入排序功能
void insertSort(TBook *a, bool (*sort)(elementType, elementType));

//模糊查找打印
void printAllMatches(TBook *a, elementType element, bool (*find)(elementType, elementType), bool (*sort)(elementType, elementType));

//保存通讯录到本地文件
void SaveBook(TBook *a, char *(*GetInfo)(void*));

//读取文件中的内容
void ReadFromBook(TBook *a,void *(*ptr)(char *, char *));
#endif